home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / sgwnd10 / clstring.bas < prev    next >
Encoding:
BASIC Source File  |  1998-06-03  |  14.0 KB  |  427 lines

  1. Attribute VB_Name = "VBString"
  2. 'String manipulation routines
  3. 'Doesn't require other modul
  4. 'Versoin 4.0.0 updated 26.09.1996
  5. 'Added 27.09.1996 String_WordWrap,FindStringInString removed,CampareStrings removed
  6. Option Explicit
  7.  
  8. Private Declare Function lstrcmpi Lib "kernel32" Alias "lstrcmpiA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
  9.  
  10. ' For String_Align
  11. Private Const N_FMT_LEFT = 0
  12. Private Const N_FMT_CENTER = 1
  13. Private Const N_FMT_RIGHT = 2
  14.  
  15. Private Const S_TAG_DELIMITER = ";"  ' Tag delimiter string
  16. ' Tag substring Ids
  17. Private Const S_TID_LOOKUP = "LK"
  18. Private Const S_TID_ID = "ID"
  19. Private Const S_TID_LINKLABEL = "LBLID"
  20. Private Const S_TID_DBFIELD = "DBFLD"
  21. Private Const S_TID_LINKTEXT = "TXTID"
  22.  
  23. Private Const N_MAX_TEXTLEN = 30720  ' 30K ' Limit for Text property length
  24.  
  25. Public Function String_Capitalize(ByVal sOrig$) As String
  26.    Dim i%
  27.     
  28.    If sOrig <> "" Then
  29.        Mid$(sOrig, 1, 1) = UCase$(Mid$(sOrig, 1, 1))
  30.        For i = 1 To Len(sOrig) - 1
  31.          If Mid$(sOrig, i, 2) = vbCrLf Then Mid$(sOrig, i + 2, 1) = UCase$(Mid$(sOrig, i + 2, 1))
  32.          If Mid$(sOrig, i, 1) = " " Then Mid$(sOrig, i + 1, 1) = UCase$(Mid$(sOrig, i + 1, 1))
  33.        Next
  34.    End If
  35.    
  36.    String_Capitalize = sOrig
  37. End Function
  38.  
  39.  
  40. Function String_FindString(ByVal sString As String, sFind As String, sSubDelimiter As String, iStart As Integer, cmp As Integer) As Integer
  41.    Dim RetVal As Integer, n As Integer, i As Integer
  42.    Dim sBuf As String
  43.    On Error GoTo FindStringErr
  44.  
  45.    RetVal = 0
  46.    n = 1
  47.    Do
  48.       sBuf = String_Parameter(sFind, n, sSubDelimiter)
  49.       If sBuf <> "" Then
  50.          i = InStr(iStart, sString, sBuf, cmp)
  51.          If i > 0 Then
  52.             If i < RetVal Or RetVal = 0 Then RetVal = i
  53.          End If
  54.       End If
  55.       n = n + 1
  56.    Loop While sBuf <> ""
  57.    String_FindString = RetVal
  58.  
  59.    Exit Function
  60. FindStringErr:
  61.    String_FindString = 0
  62.    Exit Function
  63. End Function
  64. Function String_StripMultipleBlanks(ByVal sOrig As String) As String
  65.    Dim i%, n%, m%
  66.  
  67.    m = Len(sOrig)  'strip multiple blanks
  68.    n = m - 1
  69.    For i = m To 1 Step -1
  70.       If Mid(sOrig, i, 1) = " " Then
  71.          n = i
  72.          Do
  73.             i = i - 1
  74.             If i > 1 Then
  75.                If Mid(sOrig, i, 1) <> " " Then Exit Do
  76.             End If
  77.          Loop While i > 1
  78.          sOrig = Left(sOrig, i + 1) + Mid(sOrig, n + 1)
  79.       End If
  80.    Next
  81.    String_StripMultipleBlanks = sOrig
  82. End Function
  83.  
  84. '------------------------------------------------------------------------------------------------
  85. '   Desc: strip a given string of all carriage return and adds new in desired position
  86. '  Given: sString - source string
  87. '         iMaxLen - longest size of single line
  88. '         frm     - form, used for font information
  89. ' Global: nil
  90. 'Returns: wraped string
  91. '   Note: nil
  92. '   Hist: 27.09.1996 - Goran Borevkovic, created
  93. '-----------------------------------------------------------------------------------------
  94. Public Function String_WordWrap(ByVal sString As String, iMaxLen As Integer, frm As Form) As String
  95.    Dim i As Integer
  96.    Dim sWord As String, sTmpString As String
  97.    Dim sSingleLine As String
  98.    
  99.    sString = String_Token(sString, Chr(13), Chr(32))
  100.    sString = sString & Chr(32) & "<EndOfString>"
  101.    
  102.    Do
  103.       i = i + 1
  104.       sWord = String_Parameter(sString, i, Chr(32))
  105.       If frm.TextWidth(sSingleLine) + frm.TextWidth(sTmpString) > iMaxLen Then
  106.          sTmpString = sTmpString & Chr(13) & sWord
  107.          sSingleLine = sWord
  108.       Else
  109.          sTmpString = sTmpString & Chr(32) & sWord
  110.          sSingleLine = sSingleLine & Chr(32) & sWord
  111.       End If
  112.    Loop While sWord <> "<EndOfString>"
  113.    sTmpString = Left$(sTmpString, Len(sTmpString) - 14)
  114.    String_WordWrap = sTmpString
  115. End Function
  116.  
  117. '------------------------------------------------------------------------------------------------
  118. '   Desc: count characters in string
  119. '  Given: sString - source string
  120. '         sChar - character we want to count
  121. ' Global: nil
  122. 'Returns: numer of characters in string
  123. '   Note: nil
  124. '   Hist: 27.09.1996 - Goran Borevkovic, created
  125. '-----------------------------------------------------------------------------------------
  126. Public Function String_CharCount(sString As String, sChar As String) As Integer
  127.    Dim iStrPos As Integer
  128.    Dim i As Integer
  129.  
  130.    iStrPos = InStr(sString, sChar)
  131.  
  132.    Do While iStrPos > 0
  133.       i = i + 1
  134.       iStrPos = InStr(iStrPos + 1, sString, sChar)
  135.    Loop
  136.    String_CharCount = i
  137. End Function
  138.  
  139.  
  140. '------------------------------------------------------------------------------------------------
  141. '   Desc: Formats given string by aligning it in the result string
  142. '  Given: sRaw - string to format
  143. '         nLen - desired length of the result string
  144. '         nAlign - desired alignment
  145. ' Return: formatted string
  146. '   Hist: 941011 - B.Spiljak, created
  147. '------------------------------------------------------------------------------------------------
  148. Function String_Align(ByVal sRaw As String, nLen As Integer, nAlign As Integer) As String
  149.    On Error Resume Next
  150.  
  151.    Dim sFmt As String
  152.    Dim n As Integer
  153.  
  154.    n = Len(sRaw)
  155.  
  156.    Select Case nAlign
  157.       Case N_FMT_LEFT
  158.          If nLen < n Then
  159.             sFmt = Left$(sRaw, nLen)
  160.          Else
  161.             sFmt = sRaw + Space$(nLen - n)
  162.          End If
  163.       Case N_FMT_CENTER
  164.          If nLen < n Then
  165.             sFmt = Mid$(sRaw, (n - nLen) / 2)
  166.             sFmt = Left$(sRaw, nLen)
  167.          Else
  168.             sFmt = Space$((n - nLen) / 2) + sRaw
  169.             sFmt = sFmt + Space$(nLen - Len(sFmt))
  170.          End If
  171.       Case N_FMT_RIGHT
  172.          If nLen < n Then
  173.             sFmt = Right$(sRaw, nLen)
  174.          Else
  175.             sFmt = Space$(nLen - n) + sRaw
  176.          End If
  177.    End Select
  178.    String_Align = sFmt
  179. End Function
  180.  
  181. '------------------------------------------------------------------------------------------------
  182. '   Desc: returns the requested parameter from the source string
  183. '  Given: sString - source string
  184. '         iParameter - parameter position, 1 -> X
  185. '         sDelimeter - parameter delimiter string
  186. ' Global: nil
  187. 'Returns: requested parameter or null if not found or error
  188. '   Note: nil
  189. '   Hist: 930907 - R.Parlee, created
  190. '         940218 - R.Parlee, fixed bug, now retrieves last parameter in string
  191. '         940518 - R.Parlee, added check for iParameter greater than number of parameters
  192. '                  String_Parameter returns null
  193. '------------------------------------------------------------------------------------------------
  194. Function String_Parameter(ByVal sString As String, iParameter As Integer, sDelimiter As String) As String
  195.    Dim iPos As Integer
  196.    Dim i As Integer
  197.    Dim iEnd As Integer
  198.    Dim iLastPos As Integer
  199.  
  200.    On Error GoTo sParmErr
  201.  
  202.    If Len(sString) = 0 Then 'exit if nothing to do
  203.       String_Parameter = sString
  204.       Exit Function
  205.    End If
  206.    'sString = Trim(sString)
  207.    iPos = 0
  208.    iLastPos = 0
  209.    For i = 1 To iParameter - 1
  210.       iPos = InStr(iPos + 1, sString, sDelimiter)
  211.       If iPos < iLastPos Then
  212.          String_Parameter = ""
  213.          Exit Function
  214.       End If
  215.       iLastPos = iPos
  216.    Next
  217.    iEnd = InStr(iPos + 1, sString, sDelimiter)
  218.    If (iPos = 0) And iParameter > 1 Then
  219.       String_Parameter = ""
  220.    ElseIf (iPos = 0) And (iEnd = 0) Then
  221.       String_Parameter = sString
  222.    ElseIf (iEnd = 0) Then
  223.       String_Parameter = Mid(sString, iPos + 1, Len(sString) - iPos + 1)
  224.    ElseIf iParameter = 1 Then
  225.       String_Parameter = Left(sString, iEnd - iPos - 1)
  226.    Else
  227.       String_Parameter = Mid(sString, iPos + 1, iEnd - iPos - 1)
  228.    End If
  229.    Exit Function
  230.  
  231. sParmErr:
  232.    String_Parameter = ""
  233.    Exit Function
  234.   
  235. End Function
  236. '-------------------------------------------------------------------------------------------------
  237. '   Desc: Extracts value for parameter with given Id
  238. '  Given: sString - taged string
  239. '         sParamId - parameter id
  240. 'Returns: if found - target value, empty string otherwise
  241. '   Note: Usually used for control Tag strings
  242. '   Hist: 950320 - B.Spiljak, Created
  243. '-------------------------------------------------------------------------------------------------
  244. Function String_ParameterValue(sString As String, sParamId As String) As String
  245.    Dim sItem As String
  246.    Dim i As Integer
  247.  
  248.    On Error Resume Next
  249.  
  250.    String_ParameterValue = ""
  251.    
  252.    i = 1
  253.    Do
  254.       sItem = LTrim(String_Parameter(sString, i, S_TAG_DELIMITER))
  255.       If sItem <> "" Then
  256.          If Left(sItem, Len(sParamId)) = sParamId Then Exit Do
  257.       End If
  258.       i = i + 1
  259.    Loop Until sItem = ""
  260.    
  261.    If sItem <> "" Then
  262.       i = InStr(sItem, "=")
  263.       If i > 0 Then String_ParameterValue = Trim(Mid(sItem, i + 1))
  264.    End If
  265. End Function
  266.  
  267. '------------------------------------------------------------------------------------------------
  268. '   Desc: reverse the character order of a given string
  269. '  Given: sOrig - string to reverse
  270. ' Global: nil
  271. 'Returns: String_Reverse - sOrig in reverse order
  272. '   Note: nil
  273. '   Hist: 930907 - R.Parlee, created
  274. '------------------------------------------------------------------------------------------------
  275. Function String_Reverse(sOrig As String) As String
  276.    Dim sNew As String
  277.    Dim i As Integer
  278.  
  279.    On Error Resume Next
  280.    
  281.    For i = Len(sOrig) To 1 Step -1
  282.       sNew = sNew + Mid(sOrig, i, 1)
  283.    Next
  284.    String_Reverse = sNew
  285. End Function
  286.  
  287. '------------------------------------------------------------------------------------------------
  288. '   Desc: removes a given character from a string
  289. '  Given: sOrig - copy of original string
  290. '         sChar - character to remove
  291. ' Global: nil
  292. 'Returns: original string without the given character
  293. '  Calls: nil
  294. '   Note:
  295. '   Hist: 930831 - R.Parlee, created
  296. '------------------------------------------------------------------------------------------------
  297. Function String_StripChar(ByVal sOrig As String, sChar As String) As String
  298.    Dim Pos As Integer
  299.    Dim iLen As Integer
  300.  
  301.    On Error Resume Next
  302.    
  303.    iLen = Len(sOrig)
  304.    If iLen > 0 Then
  305.       Pos = InStr(sOrig, sChar)
  306.       Do While (Pos > 0)
  307.          If (Pos <= iLen) Then
  308.             sOrig = Left$(sOrig, Pos - 1) + Right$(sOrig, iLen - Pos)
  309.             iLen = iLen - 1
  310.          End If
  311.          Pos = InStr(sOrig, sChar)
  312.       Loop
  313.    End If
  314.    String_StripChar = sOrig
  315. End Function
  316.  
  317. '---------------------------------------------------------------------------------------------------
  318. '   Desc: strip a given string of all carriage return, linefeed characters
  319. '  Given: sTemp - copy of string to be stripped
  320. 'Returns: sTemp with no crlf
  321. '   Note: nil
  322. '   Hist: 930501 - R.Parlee, created
  323. '         930831 - R.Parlee, adjusted to use stripChar
  324. '---------------------------------------------------------------------------------------------------
  325. Function String_StripCrLf(ByVal sTemp As String) As String
  326.    
  327.    On Error Resume Next
  328.  
  329.    sTemp = String_StripChar(sTemp, Chr$(13))
  330.    sTemp = String_StripChar(sTemp, Chr$(10))
  331.    String_StripCrLf = sTemp
  332. End Function
  333. Function String_StripBlanks(ByVal sTemp As String) As String
  334.    
  335.    On Error Resume Next
  336.    
  337.    sTemp = String_StripNonAscii(sTemp, False)
  338.    
  339.    sTemp = String_StripChar(sTemp, Chr$(8))
  340.    sTemp = String_StripChar(sTemp, Chr$(9))
  341.    sTemp = String_StripChar(sTemp, Chr$(13))
  342.    sTemp = String_StripChar(sTemp, Chr$(10))
  343.    String_StripBlanks = Trim$(sTemp)
  344. End Function
  345.  
  346. '---------------------------------------------------------------------------------------------------
  347. '   Desc: remove all non ascii characters from a given string
  348. '  Given: string, bPad - determines whether to replace removed chars with spaces
  349. ' Return:
  350. '   Note:
  351. '---------------------------------------------------------------------------------------------------
  352. Function String_StripNonAscii(ByVal sOrig As String, bPad As Integer) As String
  353.    Dim i As Integer
  354.    Dim sTemp As String
  355.    
  356.    On Error Resume Next
  357.  
  358.    For i = 1 To Len(sOrig)
  359.       If Asc(Mid(sOrig, i, 1)) < 32 Or Asc(Mid(sOrig, i, 1)) > 126 Then
  360.          If bPad Then sTemp = sTemp + " "
  361.       Else
  362.          sTemp = sTemp + Mid(sOrig, i, 1)
  363.       End If
  364.    Next
  365.    String_StripNonAscii = sTemp
  366. End Function
  367.  
  368. '------------------------------------------------------------------------------------------------
  369. '   Desc: Converts VB String to C-style string (null-terminated)
  370. '  Given: strVB - VB string
  371. ' Return: converted string
  372. '   Note: returns original string on error
  373. '   Hist: 941116 - B.Spiljak, created
  374. '------------------------------------------------------------------------------------------------
  375. Function String_ToCStyle(strVB As String) As String
  376.    On Error GoTo cStylErr:
  377.    
  378.    Dim n As Integer
  379.    
  380.    n = InStr(strVB, Chr$(0))
  381.    String_ToCStyle = IIf(n > 0, Left$(strVB, n), strVB + Chr$(0))
  382.    Exit Function
  383. cStylErr:
  384.    String_ToCStyle = strVB
  385.    Exit Function
  386. End Function
  387.  
  388. ' Replace all occurences of sToken with sReplacement in the sOrig string
  389. '
  390. Function String_Token(sOrig As String, sToken As String, sReplacement As String) As String
  391.    Dim iPos As Integer
  392.    Dim sLocal As String
  393.    Dim sRet As String
  394.    
  395.    iPos = -1
  396.    sLocal = sOrig
  397.    sRet = ""
  398.    Do
  399.       iPos = InStr(sLocal, sToken)
  400.       If iPos > 0 Then
  401.          sRet = sRet & Left(sLocal, iPos - 1) & sReplacement
  402.          sLocal = Mid(sLocal, iPos + Len(sToken))
  403.       End If
  404.    Loop While iPos > 0
  405.    sRet = sRet & sLocal
  406.    String_Token = sRet
  407. End Function
  408.  
  409. '------------------------------------------------------------------------------------------------
  410. '   Desc: Converts C-style string (null-terminated) to VB string
  411. '  Given: strC - C-style string
  412. ' Return: converted string
  413. '   Note: returns original string on error
  414. '   Hist: 941116 - B.Spiljak, created
  415. '------------------------------------------------------------------------------------------------
  416. Function String_ToVBStyle(strC As String) As String
  417.    On Error GoTo vStylErr
  418.    String_ToVBStyle = Left$(strC, InStr(strC, Chr$(0)) - 1)
  419.    Exit Function
  420.  
  421. vStylErr:
  422.    String_ToVBStyle = strC
  423.    Exit Function
  424.  
  425. End Function
  426.  
  427.